{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3WJebPGI95-j"
      },
      "source": [
        "# Fairlib Interactive Tutorial\n",
        "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/HanXudong/fairlib/blob/main/tutorial/demo.ipynb)\n",
        "\n",
        "# Welcome to the *fairlib* interactive tutorial\n",
        "\n",
        "In this tutorial, we will:\n",
        "- Show how to install *fairlib*, and prepare a preprocessed sentiment analysis dataset.\n",
        "- Show how to train a model with or without debiasing.\n",
        "- Show how to analyze the results, including creating tables and figures\n",
        "- Show how to run experiments over customized datasets."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "C65ClWrG95-m"
      },
      "source": [
        "## 1. Installation"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "AO7QSP_g95-m",
        "outputId": "c002300c-eac4-4b09-92cc-faf48887b353"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Collecting fairlib\n",
            "  Downloading fairlib-0.0.3-py3-none-any.whl (63 kB)\n",
            "\u001b[K     |████████████████████████████████| 63 kB 1.2 MB/s \n",
            "\u001b[?25hCollecting transformers\n",
            "  Downloading transformers-4.18.0-py3-none-any.whl (4.0 MB)\n",
            "\u001b[K     |████████████████████████████████| 4.0 MB 14.6 MB/s \n",
            "\u001b[?25hRequirement already satisfied: PyYAML in /usr/local/lib/python3.7/dist-packages (from fairlib) (3.13)\n",
            "Collecting pickle5\n",
            "  Downloading pickle5-0.0.12-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (256 kB)\n",
            "\u001b[K     |████████████████████████████████| 256 kB 36.9 MB/s \n",
            "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from fairlib) (1.21.6)\n",
            "Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from fairlib) (3.2.2)\n",
            "Requirement already satisfied: seaborn in /usr/local/lib/python3.7/dist-packages (from fairlib) (0.11.2)\n",
            "Requirement already satisfied: docopt in /usr/local/lib/python3.7/dist-packages (from fairlib) (0.6.2)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.7/dist-packages (from fairlib) (4.64.0)\n",
            "Requirement already satisfied: torch in /usr/local/lib/python3.7/dist-packages (from fairlib) (1.11.0+cu113)\n",
            "Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from fairlib) (1.3.5)\n",
            "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.7/dist-packages (from fairlib) (1.0.2)\n",
            "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->fairlib) (2.8.2)\n",
            "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->fairlib) (1.4.2)\n",
            "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->fairlib) (0.11.0)\n",
            "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->fairlib) (3.0.8)\n",
            "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from kiwisolver>=1.0.1->matplotlib->fairlib) (4.2.0)\n",
            "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib->fairlib) (1.15.0)\n",
            "Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas->fairlib) (2022.1)\n",
            "Requirement already satisfied: scipy>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->fairlib) (1.4.1)\n",
            "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->fairlib) (3.1.0)\n",
            "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn->fairlib) (1.1.0)\n",
            "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.7/dist-packages (from transformers->fairlib) (21.3)\n",
            "Collecting tokenizers!=0.11.3,<0.13,>=0.11.1\n",
            "  Downloading tokenizers-0.12.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.6 MB)\n",
            "\u001b[K     |████████████████████████████████| 6.6 MB 44.3 MB/s \n",
            "\u001b[?25hCollecting huggingface-hub<1.0,>=0.1.0\n",
            "  Downloading huggingface_hub-0.5.1-py3-none-any.whl (77 kB)\n",
            "\u001b[K     |████████████████████████████████| 77 kB 5.2 MB/s \n",
            "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.7/dist-packages (from transformers->fairlib) (3.6.0)\n",
            "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.7/dist-packages (from transformers->fairlib) (2019.12.20)\n",
            "Collecting sacremoses\n",
            "  Downloading sacremoses-0.0.49-py3-none-any.whl (895 kB)\n",
            "\u001b[K     |████████████████████████████████| 895 kB 18.7 MB/s \n",
            "\u001b[?25hRequirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from transformers->fairlib) (4.11.3)\n",
            "Collecting PyYAML\n",
            "  Downloading PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (596 kB)\n",
            "\u001b[K     |████████████████████████████████| 596 kB 38.3 MB/s \n",
            "\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from transformers->fairlib) (2.23.0)\n",
            "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers->fairlib) (3.8.0)\n",
            "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->transformers->fairlib) (1.24.3)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->transformers->fairlib) (2021.10.8)\n",
            "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->transformers->fairlib) (2.10)\n",
            "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->transformers->fairlib) (3.0.4)\n",
            "Requirement already satisfied: click in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers->fairlib) (7.1.2)\n",
            "Installing collected packages: PyYAML, tokenizers, sacremoses, huggingface-hub, transformers, pickle5, fairlib\n",
            "  Attempting uninstall: PyYAML\n",
            "    Found existing installation: PyYAML 3.13\n",
            "    Uninstalling PyYAML-3.13:\n",
            "      Successfully uninstalled PyYAML-3.13\n",
            "Successfully installed PyYAML-6.0 fairlib-0.0.3 huggingface-hub-0.5.1 pickle5-0.0.12 sacremoses-0.0.49 tokenizers-0.12.1 transformers-4.18.0\n"
          ]
        }
      ],
      "source": [
        "!pip install fairlib"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "ieklwXXP95-n"
      },
      "outputs": [],
      "source": [
        "import fairlib"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "99Nw_gKT95-n"
      },
      "source": [
        "## 2. Prepare Dataset\n",
        "\n",
        "In this notebook, we will be using the Moji dataset, where each tweet is annotated with a binary sentiment label (happy verse sad) and a binary race label (AAE verse SAE).\n",
        "Followings are random examples from the Moji dataset.\n",
        "\n",
        "| Text | Sentiment | Race |\n",
        "| ---- | --------- | ---- |\n",
        "| Dfl somebody said to me yesterday that how can u u have a iPhone or an S3 an ur phone off dfl | Positive | AAE|\n",
        "| smh I bet maybe u just don't care bout poor boo no more | Negative | AAE |\n",
        "| I actually put jeans on today and I already wanna go put on leggings or yogas | Positive | SAE |\n",
        "| I'm sitting next to the most awkward couple on the plane like they are making out and holding hands , I just can't | Negative | SAE |\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "On5LV55G4cmU"
      },
      "source": [
        "For simplification, here we directly use the encoded Moji dataset provided by [Ravfogel et al. \\(2020\\)](https://github.com/shauli-ravfogel/nullspace_projection/blob/master/download_data.sh). Original tweets are encoded with the pre-trained [DeepMoji model](https://github.com/bfelbo/DeepMoji) as 2304d vectors and grouped by the target classes  and race labels . The following cell creates a `data` directory for saving the pre-processed data."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "TY0LkuN495-o",
        "outputId": "df7ce5b1-4d3e-4fdc-e3f2-b8266a9e2900"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "--2022-05-02 02:46:21--  https://storage.googleapis.com/ai2i/nullspace/deepmoji/pos_pos.npy\n",
            "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.135.128, 74.125.142.128, 74.125.195.128, ...\n",
            "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.135.128|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 405494864 (387M) [application/octet-stream]\n",
            "Saving to: ‘data/deepmoji/pos_pos.npy’\n",
            "\n",
            "pos_pos.npy         100%[===================>] 386.71M  5.59MB/s    in 67s     \n",
            "\n",
            "2022-05-02 02:47:29 (5.77 MB/s) - ‘data/deepmoji/pos_pos.npy’ saved [405494864/405494864]\n",
            "\n",
            "--2022-05-02 02:47:29--  https://storage.googleapis.com/ai2i/nullspace/deepmoji/pos_neg.npy\n",
            "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.142.128, 74.125.195.128, 2607:f8b0:400e:c0d::80, ...\n",
            "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.142.128|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 405504080 (387M) [application/octet-stream]\n",
            "Saving to: ‘data/deepmoji/pos_neg.npy’\n",
            "\n",
            "pos_neg.npy         100%[===================>] 386.72M  6.03MB/s    in 61s     \n",
            "\n",
            "2022-05-02 02:48:31 (6.34 MB/s) - ‘data/deepmoji/pos_neg.npy’ saved [405504080/405504080]\n",
            "\n",
            "--2022-05-02 02:48:31--  https://storage.googleapis.com/ai2i/nullspace/deepmoji/neg_pos.npy\n",
            "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.195.128, 173.194.202.128, 74.125.20.128, ...\n",
            "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.195.128|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 405494864 (387M) [application/octet-stream]\n",
            "Saving to: ‘data/deepmoji/neg_pos.npy’\n",
            "\n",
            "neg_pos.npy         100%[===================>] 386.71M  5.79MB/s    in 67s     \n",
            "\n",
            "2022-05-02 02:49:40 (5.75 MB/s) - ‘data/deepmoji/neg_pos.npy’ saved [405494864/405494864]\n",
            "\n",
            "--2022-05-02 02:49:40--  https://storage.googleapis.com/ai2i/nullspace/deepmoji/neg_neg.npy\n",
            "Resolving storage.googleapis.com (storage.googleapis.com)... 74.125.195.128, 173.194.202.128, 74.125.20.128, ...\n",
            "Connecting to storage.googleapis.com (storage.googleapis.com)|74.125.195.128|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 405504080 (387M) [application/octet-stream]\n",
            "Saving to: ‘data/deepmoji/neg_neg.npy’\n",
            "\n",
            "neg_neg.npy         100%[===================>] 386.72M  6.88MB/s    in 59s     \n",
            "\n",
            "2022-05-02 02:50:40 (6.55 MB/s) - ‘data/deepmoji/neg_neg.npy’ saved [405504080/405504080]\n",
            "\n"
          ]
        }
      ],
      "source": [
        "!mkdir -p data/deepmoji\n",
        "!wget 'https://storage.googleapis.com/ai2i/nullspace/deepmoji/pos_pos.npy' -P 'data/deepmoji'\n",
        "!wget 'https://storage.googleapis.com/ai2i/nullspace/deepmoji/pos_neg.npy' -P 'data/deepmoji'\n",
        "!wget 'https://storage.googleapis.com/ai2i/nullspace/deepmoji/neg_pos.npy' -P 'data/deepmoji'\n",
        "!wget 'https://storage.googleapis.com/ai2i/nullspace/deepmoji/neg_neg.npy' -P 'data/deepmoji'"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "o7wjOYia4cmV"
      },
      "source": [
        "We split the dataset into the train, dev, and test sets."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "id": "6mcLbFu1nUFp"
      },
      "outputs": [],
      "source": [
        "fairlib.utils.seed_everything(2022)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "1Q4HZjS138Al"
      },
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "import os\n",
        "\n",
        "def read_data_file(input_file: str):\n",
        "    vecs = np.load(input_file)\n",
        "\n",
        "    np.random.shuffle(vecs)\n",
        "\n",
        "    return vecs[:40000], vecs[40000:42000], vecs[42000:44000]"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "chyMOL0U4Hqe"
      },
      "outputs": [],
      "source": [
        "in_dir = \"data/deepmoji\"\n",
        "out_dir = \"data/deepmoji\"\n",
        "\n",
        "os.makedirs(out_dir, exist_ok=True)\n",
        "\n",
        "for split in ['pos_pos', 'pos_neg', 'neg_pos', 'neg_neg']:\n",
        "    train, dev, test = read_data_file(in_dir + '/' + split + '.npy')\n",
        "    for split_dir, data in zip(['train', 'dev', 'test'], [train, dev, test]):\n",
        "        os.makedirs(out_dir + '/' + split_dir, exist_ok=True)\n",
        "        np.save(out_dir + '/' + split_dir + '/' + split + '.npy', data)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "JMQ4Eivp95-p"
      },
      "source": [
        "## 3. Standard Usage"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tncaXJIjQ0JB"
      },
      "source": [
        "So far, we have installed the *fairlib* and prepared the dataset for training. \n",
        "Now let's take a look at an example of training a standard sentiment analysis model naively without debiasing. \n",
        "\n",
        "Before moving to the training, we first define a list of hyperparameters that will be repeatedly used in this tutorial."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "PMHxJZD77j2Q"
      },
      "outputs": [],
      "source": [
        "Shared_options = {\n",
        "    # The name of the dataset, corresponding dataloader will be used,\n",
        "    \"dataset\":  \"Moji\",\n",
        "\n",
        "    # Specifiy the path to the input data\n",
        "    \"data_dir\": \"data/deepmoji\",\n",
        "\n",
        "    # Device for computing, -1 is the cpu; non-negative numbers indicate GPU id.\n",
        "    \"device_id\":    -1,\n",
        "\n",
        "    # The default path for saving experimental results\n",
        "    \"results_dir\":  r\"results\",\n",
        "\n",
        "    # Will be used for saving experimental results\n",
        "    \"project_dir\":  r\"dev\",\n",
        "\n",
        "    # We will focusing on TPR GAP, implying the Equalized Odds for binary classification.\n",
        "    \"GAP_metric_name\":  \"TPR_GAP\",\n",
        "\n",
        "    # The overall performance will be measured as accuracy\n",
        "    \"Performance_metric_name\":  \"accuracy\",\n",
        "\n",
        "    # Model selections are based on distance to optimum, see section 4 in our paper for more details\n",
        "    \"selection_criterion\":  \"DTO\",\n",
        "\n",
        "    # Default dirs for saving checkpoints\n",
        "    \"checkpoint_dir\":   \"models\",\n",
        "    \"checkpoint_name\":  \"checkpoint_epoch\",\n",
        "\n",
        "    # Loading experimental results\n",
        "    \"n_jobs\":   1,\n",
        "}"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "zsCn6p50-qoK"
      },
      "outputs": [],
      "source": [
        "!rm -rf results"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wgvhBuOA4cmY"
      },
      "source": [
        "Without an explicitly specified debiasing approach, *fairlib* by default trains and evaluates a binary MLP classifier. As a result, we only need to define: \n",
        "1. Path to the dataset.\n",
        "2. Dataset name, which will be used to initialize built-in dataloaders.\n",
        "3. Experiment id, which is the identifier of the current experiment, and experimental results with respect to the same `exp_id` will be saved in the same dir."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Y72Ep-kV95-p",
        "outputId": "419d8867-4c23-4d7f-b426-25656d80d3b5"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "INFO:root:Unexpected args: ['-f', '/root/.local/share/jupyter/runtime/kernel-94fdc7f5-0523-4a20-889a-536d5b502976.json']\n",
            "INFO:root:Logging to ./results/dev/Moji/vanilla/output.log\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "2022-05-02 02:50:46 [INFO ]  ======================================== 2022-05-02 02:50:46 ========================================\n",
            "2022-05-02 02:50:46 [INFO ]  Base directory is ./results/dev/Moji/vanilla\n",
            "Loaded data shapes: (99998, 2304), (99998,), (99998,)\n",
            "Loaded data shapes: (8000, 2304), (8000,), (8000,)\n",
            "Loaded data shapes: (7998, 2304), (7998,), (7998,)\n"
          ]
        }
      ],
      "source": [
        "args = {\n",
        "    \"dataset\":Shared_options[\"dataset\"], \n",
        "    \"data_dir\":Shared_options[\"data_dir\"],\n",
        "    \"device_id\":Shared_options[\"device_id\"],\n",
        "\n",
        "    # Give a name to the exp, which will be used in the path\n",
        "    \"exp_id\":\"vanilla\",\n",
        "}\n",
        "\n",
        "# Init the argument\n",
        "options = fairlib.BaseOptions()\n",
        "state = options.get_state(args=args, silence=True)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sb9xA0Y14cmZ"
      },
      "source": [
        "### Train a model without explicitly debiasing"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3Bzy4c3B4cmZ"
      },
      "source": [
        "Given the 2304d encoded text representations, the default model in *fairlib* is a 3-layer MLP classifier with Tanh activation functions in between. \n",
        "\n",
        "To customize the MLP architecture, we can specify the hyperparameters in the `state` as follows\n",
        "```python\n",
        "state.hidden_size = 300\n",
        "state.n_hidden = 2\n",
        "state.activation_function = \"Tanh\"\n",
        "```\n",
        "\n",
        "Please see the [model architecture section](https://github.com/HanXudong/fairlib/blob/main/docs/usage.md#basic-operation) for more details about the hyperparameters corresponding to the model architecture."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Cjg7pH1R95-r",
        "outputId": "1893a18e-b400-44a0-cca3-82a42dc47eac"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "2022-05-02 02:50:47 [INFO ]  MLP( \n",
            "2022-05-02 02:50:47 [INFO ]    (output_layer): Linear(in_features=300, out_features=2, bias=True)\n",
            "2022-05-02 02:50:47 [INFO ]    (AF): Tanh()\n",
            "2022-05-02 02:50:47 [INFO ]    (hidden_layers): ModuleList(\n",
            "2022-05-02 02:50:47 [INFO ]      (0): Linear(in_features=2304, out_features=300, bias=True)\n",
            "2022-05-02 02:50:47 [INFO ]      (1): Tanh()\n",
            "2022-05-02 02:50:47 [INFO ]      (2): Linear(in_features=300, out_features=300, bias=True)\n",
            "2022-05-02 02:50:47 [INFO ]      (3): Tanh()\n",
            "2022-05-02 02:50:47 [INFO ]    )\n",
            "2022-05-02 02:50:47 [INFO ]    (criterion): CrossEntropyLoss()\n",
            "2022-05-02 02:50:47 [INFO ]  )\n",
            "2022-05-02 02:50:47 [INFO ]  Total number of parameters: 782402 \n",
            "\n"
          ]
        }
      ],
      "source": [
        "fairlib.utils.seed_everything(2022)\n",
        "\n",
        "# Init Model\n",
        "model = fairlib.networks.get_main_model(state)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZHHnI6Nr4cmZ"
      },
      "source": [
        "A list of hyperparameters has been predefined in *fairlib*, so we can now directly train a model with the model class's built-in `train_self` method.\n",
        "\n",
        "Please see the [link](https://github.com/HanXudong/fairlib/blob/23a32a6f4b3db00134bd651a6e0aa0747ba0adc2/fairlib/src/base_options.py#L162-L200) for all hyperparameters associated with model training."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "jxEnlrt195-r",
        "outputId": "648d7a37-bc53-4180-9b69-f901c2981409"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "2022-05-02 02:50:48 [INFO ]  Epoch:    0 [      0/  99998 ( 0%)]\tLoss: 0.6906\t Data Time: 0.02s\tTrain Time: 0.20s\n",
            "2022-05-02 02:50:51 [INFO ]  Epoch:    0 [  51200/  99998 (51%)]\tLoss: 0.3926\t Data Time: 0.37s\tTrain Time: 3.35s\n",
            "2022-05-02 02:50:56 [INFO ]  Evaluation at Epoch 0\n",
            "2022-05-02 02:50:56 [INFO ]  Validation accuracy: 72.55\tmacro_fscore: 72.44\tmicro_fscore: 72.55\tTPR_GAP: 40.07\tFPR_GAP: 40.07\tPPR_GAP: 39.10\t\n",
            "2022-05-02 02:50:56 [INFO ]  Test accuracy: 71.41\tmacro_fscore: 71.30\tmicro_fscore: 71.41\tTPR_GAP: 39.01\tFPR_GAP: 39.01\tPPR_GAP: 37.84\t\n",
            "2022-05-02 02:50:56 [INFO ]  Epoch:    1 [      0/  99998 ( 0%)]\tLoss: 0.4105\t Data Time: 0.02s\tTrain Time: 0.06s\n",
            "2022-05-02 02:50:59 [INFO ]  Epoch:    1 [  51200/  99998 (51%)]\tLoss: 0.4156\t Data Time: 0.39s\tTrain Time: 3.32s\n",
            "2022-05-02 02:51:03 [INFO ]  Evaluation at Epoch 1\n",
            "2022-05-02 02:51:03 [INFO ]  Validation accuracy: 72.36\tmacro_fscore: 72.32\tmicro_fscore: 72.36\tTPR_GAP: 39.81\tFPR_GAP: 39.81\tPPR_GAP: 39.27\t\n",
            "2022-05-02 02:51:03 [INFO ]  Test accuracy: 71.01\tmacro_fscore: 70.98\tmicro_fscore: 71.01\tTPR_GAP: 39.40\tFPR_GAP: 39.40\tPPR_GAP: 38.64\t\n",
            "2022-05-02 02:51:03 [INFO ]  Epoch:    2 [      0/  99998 ( 0%)]\tLoss: 0.3433\t Data Time: 0.01s\tTrain Time: 0.06s\n",
            "2022-05-02 02:51:07 [INFO ]  Epoch:    2 [  51200/  99998 (51%)]\tLoss: 0.3734\t Data Time: 0.37s\tTrain Time: 3.31s\n",
            "2022-05-02 02:51:11 [INFO ]  Epochs since last improvement: 1\n",
            "2022-05-02 02:51:11 [INFO ]  Evaluation at Epoch 2\n",
            "2022-05-02 02:51:11 [INFO ]  Validation accuracy: 72.42\tmacro_fscore: 72.37\tmicro_fscore: 72.42\tTPR_GAP: 40.91\tFPR_GAP: 40.91\tPPR_GAP: 40.20\t\n",
            "2022-05-02 02:51:11 [INFO ]  Test accuracy: 70.98\tmacro_fscore: 70.93\tmicro_fscore: 70.98\tTPR_GAP: 40.21\tFPR_GAP: 40.21\tPPR_GAP: 39.39\t\n",
            "2022-05-02 02:51:11 [INFO ]  Epoch:    3 [      0/  99998 ( 0%)]\tLoss: 0.3773\t Data Time: 0.02s\tTrain Time: 0.06s\n",
            "2022-05-02 02:51:15 [INFO ]  Epoch:    3 [  51200/  99998 (51%)]\tLoss: 0.3479\t Data Time: 0.37s\tTrain Time: 3.28s\n",
            "2022-05-02 02:51:19 [INFO ]  Epochs since last improvement: 2\n",
            "2022-05-02 02:51:19 [INFO ]  Evaluation at Epoch 3\n",
            "2022-05-02 02:51:19 [INFO ]  Validation accuracy: 72.09\tmacro_fscore: 71.92\tmicro_fscore: 72.09\tTPR_GAP: 41.54\tFPR_GAP: 41.54\tPPR_GAP: 40.17\t\n",
            "2022-05-02 02:51:19 [INFO ]  Test accuracy: 71.17\tmacro_fscore: 71.02\tmicro_fscore: 71.17\tTPR_GAP: 40.32\tFPR_GAP: 40.32\tPPR_GAP: 38.96\t\n",
            "2022-05-02 02:51:19 [INFO ]  Epoch:    4 [      0/  99998 ( 0%)]\tLoss: 0.3839\t Data Time: 0.01s\tTrain Time: 0.06s\n",
            "2022-05-02 02:51:23 [INFO ]  Epoch:    4 [  51200/  99998 (51%)]\tLoss: 0.3499\t Data Time: 0.39s\tTrain Time: 3.30s\n",
            "2022-05-02 02:51:26 [INFO ]  Epochs since last improvement: 3\n",
            "2022-05-02 02:51:27 [INFO ]  Evaluation at Epoch 4\n",
            "2022-05-02 02:51:27 [INFO ]  Validation accuracy: 71.50\tmacro_fscore: 71.43\tmicro_fscore: 71.50\tTPR_GAP: 42.76\tFPR_GAP: 42.76\tPPR_GAP: 42.00\t\n",
            "2022-05-02 02:51:27 [INFO ]  Test accuracy: 70.49\tmacro_fscore: 70.43\tmicro_fscore: 70.49\tTPR_GAP: 41.37\tFPR_GAP: 41.37\tPPR_GAP: 40.51\t\n",
            "2022-05-02 02:51:27 [INFO ]  Epoch:    5 [      0/  99998 ( 0%)]\tLoss: 0.3746\t Data Time: 0.01s\tTrain Time: 0.07s\n",
            "2022-05-02 02:51:31 [INFO ]  Epoch:    5 [  51200/  99998 (51%)]\tLoss: 0.3748\t Data Time: 0.38s\tTrain Time: 3.30s\n",
            "2022-05-02 02:51:34 [INFO ]  Epochs since last improvement: 4\n",
            "2022-05-02 02:51:35 [INFO ]  Evaluation at Epoch 5\n",
            "2022-05-02 02:51:35 [INFO ]  Validation accuracy: 72.67\tmacro_fscore: 72.60\tmicro_fscore: 72.67\tTPR_GAP: 39.17\tFPR_GAP: 39.17\tPPR_GAP: 38.35\t\n",
            "2022-05-02 02:51:35 [INFO ]  Test accuracy: 71.69\tmacro_fscore: 71.62\tmicro_fscore: 71.69\tTPR_GAP: 37.97\tFPR_GAP: 37.97\tPPR_GAP: 36.91\t\n",
            "2022-05-02 02:51:35 [INFO ]  Epoch:    6 [      0/  99998 ( 0%)]\tLoss: 0.3624\t Data Time: 0.01s\tTrain Time: 0.07s\n",
            "2022-05-02 02:51:38 [INFO ]  Epoch:    6 [  51200/  99998 (51%)]\tLoss: 0.3529\t Data Time: 0.37s\tTrain Time: 3.28s\n",
            "2022-05-02 02:51:42 [INFO ]  Epochs since last improvement: 5\n",
            "2022-05-02 02:51:42 [INFO ]  Evaluation at Epoch 6\n",
            "2022-05-02 02:51:42 [INFO ]  Validation accuracy: 72.70\tmacro_fscore: 72.62\tmicro_fscore: 72.70\tTPR_GAP: 38.29\tFPR_GAP: 38.29\tPPR_GAP: 37.50\t\n",
            "2022-05-02 02:51:42 [INFO ]  Test accuracy: 71.76\tmacro_fscore: 71.70\tmicro_fscore: 71.76\tTPR_GAP: 37.59\tFPR_GAP: 37.59\tPPR_GAP: 36.79\t\n"
          ]
        }
      ],
      "source": [
        "model.train_self()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z7w7Ssje4cma"
      },
      "source": [
        "After each iteration (epoch), evaluation results over the validation set and test set will be printed, including metrics for both performance and fairness.\n",
        "- Performance metrics: accuracy, macro F1 score, and micro F1 score\n",
        "- Bias metrics： RMS aggregated TPR GAP, RMS aggregated TNR GAP, and RMS aggregated PPR GAP.\n",
        "\n",
        "Briefly, these bias metrics measure how protected groups perform differently from each other. For example, the TPR GAP measures the True Positive Rate difference between AAE and SAE. All these three bias metrics should be 0 for a fair model.\n",
        "\n",
        "Moreover, GAP metrics could be aligned with particular well-known fairness metrics. For example, TPR GAP corresponds to Equal Opportunity Fairness, and Both TPR GAP and FPR GAP measure equalized Odds criterion. Please refer to [Barocas et al. 2019](https://fairmlbook.org/classification.html).\n",
        "\n",
        "It can be seen that the naively trained model achieves around 72\\% accuracy and 39\\% GAP, which is not ideal."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "icypOoID4cma"
      },
      "source": [
        "### Bias mitigation through balanced training and adversarial training"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V8IE07Tw4cma"
      },
      "source": [
        "To mitigate bias in the sentiment analysis, we show an example of employing balanced training and adversarial training simultaneously.\n",
        "\n",
        "In terms of the balanced training, we resample each group of instances with different probabilities corresponding to the Equal Opportunity fairness criterion ([Han et al. 2021](https://arxiv.org/abs/2109.08253)).\n",
        "\n",
        "Adversarial training ([Li et al. 2018](https://arxiv.org/abs/1805.06093)) is applied at the training time, where an extra adversary component is trained to identify protected labels (AAE verse SAE in this tutorial) from the intermediate representations of the sentiment analysis model. The sentiment analysis model will be trained to unlearn the adversary, i.e., remove race information from its intermediate representations, and thus makes fairer predictions.\n",
        "\n",
        "Balanced training and adversarial training are built-in methods in *fairlib*, so we can adopt these two methods by simply specifying corresponding arguments, as shown in the following cell.\n",
        "\n",
        "- A list of supported bias mitigation methods is shown [here](https://github.com/HanXudong/fairlib/blob/main/docs/supported_bias_mitigation_algorithms.md)\n",
        "- The [usage](https://github.com/HanXudong/fairlib/blob/main/docs/usage.md) file introduces further options associated with each debiasing method, such as the adversary architecture and balanced training strategies."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "-jLl7Wtt95-s",
        "outputId": "c01ffa74-1610-4ed1-8952-9dc229a2164a"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "2022-05-02 02:51:42 [INFO ]  Unexpected args: ['-f', '/root/.local/share/jupyter/runtime/kernel-94fdc7f5-0523-4a20-889a-536d5b502976.json']\n",
            "2022-05-02 02:51:42 [INFO ]  Logging to ./results/dev/Moji/BT_Adv/output.log\n",
            "2022-05-02 02:51:42 [INFO ]  ======================================== 2022-05-02 02:51:42 ========================================\n",
            "2022-05-02 02:51:42 [INFO ]  Base directory is ./results/dev/Moji/BT_Adv\n",
            "Loaded data shapes: (39996, 2304), (39996,), (39996,)\n",
            "Loaded data shapes: (8000, 2304), (8000,), (8000,)\n",
            "Loaded data shapes: (7996, 2304), (7996,), (7996,)\n",
            "2022-05-02 02:51:51 [INFO ]  SubDiscriminator( \n",
            "2022-05-02 02:51:51 [INFO ]    (grad_rev): GradientReversal()\n",
            "2022-05-02 02:51:51 [INFO ]    (output_layer): Linear(in_features=300, out_features=2, bias=True)\n",
            "2022-05-02 02:51:51 [INFO ]    (AF): ReLU()\n",
            "2022-05-02 02:51:51 [INFO ]    (hidden_layers): ModuleList(\n",
            "2022-05-02 02:51:51 [INFO ]      (0): Linear(in_features=300, out_features=300, bias=True)\n",
            "2022-05-02 02:51:51 [INFO ]      (1): ReLU()\n",
            "2022-05-02 02:51:51 [INFO ]      (2): Linear(in_features=300, out_features=300, bias=True)\n",
            "2022-05-02 02:51:51 [INFO ]      (3): ReLU()\n",
            "2022-05-02 02:51:51 [INFO ]    )\n",
            "2022-05-02 02:51:51 [INFO ]    (criterion): CrossEntropyLoss()\n",
            "2022-05-02 02:51:51 [INFO ]  )\n",
            "2022-05-02 02:51:51 [INFO ]  Total number of parameters: 181202 \n",
            "\n",
            "2022-05-02 02:51:51 [INFO ]  Discriminator built!\n",
            "2022-05-02 02:51:51 [INFO ]  MLP( \n",
            "2022-05-02 02:51:51 [INFO ]    (output_layer): Linear(in_features=300, out_features=2, bias=True)\n",
            "2022-05-02 02:51:51 [INFO ]    (AF): Tanh()\n",
            "2022-05-02 02:51:51 [INFO ]    (hidden_layers): ModuleList(\n",
            "2022-05-02 02:51:51 [INFO ]      (0): Linear(in_features=2304, out_features=300, bias=True)\n",
            "2022-05-02 02:51:51 [INFO ]      (1): Tanh()\n",
            "2022-05-02 02:51:51 [INFO ]      (2): Linear(in_features=300, out_features=300, bias=True)\n",
            "2022-05-02 02:51:51 [INFO ]      (3): Tanh()\n",
            "2022-05-02 02:51:51 [INFO ]    )\n",
            "2022-05-02 02:51:51 [INFO ]    (criterion): CrossEntropyLoss()\n",
            "2022-05-02 02:51:51 [INFO ]  )\n",
            "2022-05-02 02:51:51 [INFO ]  Total number of parameters: 782402 \n",
            "\n"
          ]
        }
      ],
      "source": [
        "debiasing_args = {\n",
        "    \"dataset\":Shared_options[\"dataset\"], \n",
        "    \"data_dir\":Shared_options[\"data_dir\"],\n",
        "    \"device_id\":Shared_options[\"device_id\"],\n",
        "\n",
        "    # Exp name\n",
        "    \"exp_id\":\"BT_Adv\",\n",
        "\n",
        "    # Perform adversarial training if True\n",
        "    \"adv_debiasing\":True,\n",
        "\n",
        "    # Specify the hyperparameters for Balanced Training\n",
        "    \"BT\":\"Resampling\",\n",
        "    \"BTObj\":\"EO\",\n",
        "}\n",
        "\n",
        "debias_options = fairlib.BaseOptions()\n",
        "debias_state = debias_options.get_state(args=debiasing_args, silence=True)\n",
        "\n",
        "fairlib.utils.seed_everything(2022)\n",
        "\n",
        "debias_model = fairlib.networks.get_main_model(debias_state)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "P7RpNdF04cmb"
      },
      "source": [
        "It can be seen from the last cell that the training dataset size is smaller than before (40k verse 100k) due to the preprocessing for balanced training, and an MLP adversary is initialized for adversarial debiasing.\n",
        "\n",
        "The training process will be the same as the vanilla method. We call the `train_self` function again to train a model with bias mitigation."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "QNFVF7EQ95-s",
        "outputId": "2e901900-b613-4ba3-b339-fc903615b206"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "2022-05-02 02:51:51 [INFO ]  Epoch:    0 [      0/  39996 ( 0%)]\tLoss: 0.0007\t Data Time: 0.02s\tTrain Time: 0.20s\n",
            "2022-05-02 02:51:59 [INFO ]  Evaluation at Epoch 0\n",
            "2022-05-02 02:51:59 [INFO ]  Validation accuracy: 74.26\tmacro_fscore: 73.70\tmicro_fscore: 74.26\tTPR_GAP: 19.22\tFPR_GAP: 19.22\tPPR_GAP: 16.42\t\n",
            "2022-05-02 02:51:59 [INFO ]  Test accuracy: 74.32\tmacro_fscore: 73.82\tmicro_fscore: 74.32\tTPR_GAP: 18.77\tFPR_GAP: 18.77\tPPR_GAP: 15.08\t\n",
            "2022-05-02 02:52:00 [INFO ]  Epoch:    1 [      0/  39996 ( 0%)]\tLoss: -0.1897\t Data Time: 0.01s\tTrain Time: 0.21s\n",
            "2022-05-02 02:52:08 [INFO ]  Epochs since last improvement: 1\n",
            "2022-05-02 02:52:08 [INFO ]  Evaluation at Epoch 1\n",
            "2022-05-02 02:52:08 [INFO ]  Validation accuracy: 74.70\tmacro_fscore: 74.62\tmicro_fscore: 74.70\tTPR_GAP: 9.40\tFPR_GAP: 9.40\tPPR_GAP: 5.25\t\n",
            "2022-05-02 02:52:08 [INFO ]  Test accuracy: 74.09\tmacro_fscore: 73.95\tmicro_fscore: 74.09\tTPR_GAP: 9.68\tFPR_GAP: 9.68\tPPR_GAP: 2.50\t\n",
            "2022-05-02 02:52:09 [INFO ]  Epoch:    2 [      0/  39996 ( 0%)]\tLoss: -0.1648\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:52:17 [INFO ]  Evaluation at Epoch 2\n",
            "2022-05-02 02:52:17 [INFO ]  Validation accuracy: 75.55\tmacro_fscore: 75.54\tmicro_fscore: 75.55\tTPR_GAP: 12.97\tFPR_GAP: 12.97\tPPR_GAP: 10.40\t\n",
            "2022-05-02 02:52:17 [INFO ]  Test accuracy: 75.49\tmacro_fscore: 75.49\tmicro_fscore: 75.49\tTPR_GAP: 12.18\tFPR_GAP: 12.18\tPPR_GAP: 7.55\t\n",
            "2022-05-02 02:52:17 [INFO ]  Epoch:    3 [      0/  39996 ( 0%)]\tLoss: -0.2571\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:52:25 [INFO ]  Epochs since last improvement: 1\n",
            "2022-05-02 02:52:26 [INFO ]  Evaluation at Epoch 3\n",
            "2022-05-02 02:52:26 [INFO ]  Validation accuracy: 75.81\tmacro_fscore: 75.80\tmicro_fscore: 75.81\tTPR_GAP: 15.98\tFPR_GAP: 15.98\tPPR_GAP: 14.17\t\n",
            "2022-05-02 02:52:26 [INFO ]  Test accuracy: 75.35\tmacro_fscore: 75.35\tmicro_fscore: 75.35\tTPR_GAP: 15.25\tFPR_GAP: 15.25\tPPR_GAP: 11.83\t\n",
            "2022-05-02 02:52:26 [INFO ]  Epoch:    4 [      0/  39996 ( 0%)]\tLoss: -0.1475\t Data Time: 0.01s\tTrain Time: 0.21s\n",
            "2022-05-02 02:52:35 [INFO ]  Evaluation at Epoch 4\n",
            "2022-05-02 02:52:35 [INFO ]  Validation accuracy: 75.83\tmacro_fscore: 75.80\tmicro_fscore: 75.83\tTPR_GAP: 11.29\tFPR_GAP: 11.29\tPPR_GAP: 7.70\t\n",
            "2022-05-02 02:52:35 [INFO ]  Test accuracy: 75.48\tmacro_fscore: 75.46\tmicro_fscore: 75.48\tTPR_GAP: 11.94\tFPR_GAP: 11.94\tPPR_GAP: 5.33\t\n",
            "2022-05-02 02:52:35 [INFO ]  Epoch:    5 [      0/  39996 ( 0%)]\tLoss: -0.1744\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:52:43 [INFO ]  Evaluation at Epoch 5\n",
            "2022-05-02 02:52:43 [INFO ]  Validation accuracy: 75.56\tmacro_fscore: 75.38\tmicro_fscore: 75.56\tTPR_GAP: 15.65\tFPR_GAP: 15.65\tPPR_GAP: 13.37\t\n",
            "2022-05-02 02:52:43 [INFO ]  Test accuracy: 75.26\tmacro_fscore: 75.11\tmicro_fscore: 75.26\tTPR_GAP: 15.42\tFPR_GAP: 15.42\tPPR_GAP: 11.56\t\n",
            "2022-05-02 02:52:43 [INFO ]  Epoch:    6 [      0/  39996 ( 0%)]\tLoss: -0.2199\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:52:52 [INFO ]  Epochs since last improvement: 1\n",
            "2022-05-02 02:52:52 [INFO ]  Evaluation at Epoch 6\n",
            "2022-05-02 02:52:52 [INFO ]  Validation accuracy: 75.70\tmacro_fscore: 75.68\tmicro_fscore: 75.70\tTPR_GAP: 9.72\tFPR_GAP: 9.72\tPPR_GAP: 5.60\t\n",
            "2022-05-02 02:52:52 [INFO ]  Test accuracy: 75.36\tmacro_fscore: 75.36\tmicro_fscore: 75.36\tTPR_GAP: 10.30\tFPR_GAP: 10.30\tPPR_GAP: 3.00\t\n",
            "2022-05-02 02:52:52 [INFO ]  Epoch:    7 [      0/  39996 ( 0%)]\tLoss: -0.1880\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:53:00 [INFO ]  Epochs since last improvement: 2\n",
            "2022-05-02 02:53:01 [INFO ]  Evaluation at Epoch 7\n",
            "2022-05-02 02:53:01 [INFO ]  Validation accuracy: 75.76\tmacro_fscore: 75.71\tmicro_fscore: 75.76\tTPR_GAP: 22.58\tFPR_GAP: 22.58\tPPR_GAP: 21.02\t\n",
            "2022-05-02 02:53:01 [INFO ]  Test accuracy: 74.92\tmacro_fscore: 74.88\tmicro_fscore: 74.92\tTPR_GAP: 21.33\tFPR_GAP: 21.33\tPPR_GAP: 18.93\t\n",
            "2022-05-02 02:53:01 [INFO ]  Epoch:    8 [      0/  39996 ( 0%)]\tLoss: -0.2015\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:53:09 [INFO ]  Epochs since last improvement: 3\n",
            "2022-05-02 02:53:10 [INFO ]  Evaluation at Epoch 8\n",
            "2022-05-02 02:53:10 [INFO ]  Validation accuracy: 75.64\tmacro_fscore: 75.46\tmicro_fscore: 75.64\tTPR_GAP: 17.73\tFPR_GAP: 17.73\tPPR_GAP: 15.37\t\n",
            "2022-05-02 02:53:10 [INFO ]  Test accuracy: 75.38\tmacro_fscore: 75.23\tmicro_fscore: 75.38\tTPR_GAP: 17.23\tFPR_GAP: 17.23\tPPR_GAP: 13.93\t\n",
            "2022-05-02 02:53:10 [INFO ]  Epoch:    9 [      0/  39996 ( 0%)]\tLoss: -0.2016\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:53:18 [INFO ]  Epochs since last improvement: 4\n",
            "2022-05-02 02:53:18 [INFO ]  Evaluation at Epoch 9\n",
            "2022-05-02 02:53:18 [INFO ]  Validation accuracy: 75.44\tmacro_fscore: 75.27\tmicro_fscore: 75.44\tTPR_GAP: 17.00\tFPR_GAP: 17.00\tPPR_GAP: 14.62\t\n",
            "2022-05-02 02:53:18 [INFO ]  Test accuracy: 75.45\tmacro_fscore: 75.30\tmicro_fscore: 75.45\tTPR_GAP: 17.51\tFPR_GAP: 17.51\tPPR_GAP: 13.83\t\n",
            "2022-05-02 02:53:19 [INFO ]  Epoch:   10 [      0/  39996 ( 0%)]\tLoss: -0.2201\t Data Time: 0.01s\tTrain Time: 0.20s\n",
            "2022-05-02 02:53:27 [INFO ]  Epochs since last improvement: 5\n",
            "2022-05-02 02:53:27 [INFO ]  Evaluation at Epoch 10\n",
            "2022-05-02 02:53:27 [INFO ]  Validation accuracy: 74.81\tmacro_fscore: 74.40\tmicro_fscore: 74.81\tTPR_GAP: 18.69\tFPR_GAP: 18.69\tPPR_GAP: 16.07\t\n",
            "2022-05-02 02:53:27 [INFO ]  Test accuracy: 74.42\tmacro_fscore: 74.02\tmicro_fscore: 74.42\tTPR_GAP: 18.79\tFPR_GAP: 18.79\tPPR_GAP: 15.03\t\n"
          ]
        }
      ],
      "source": [
        "# Around 90s\n",
        "debias_model.train_self()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EHlCqypt4cmb"
      },
      "source": [
        "It can be seen that GAP scores drop significantly, confirming that the debiasing method indeed improves fairness.\n",
        "\n",
        "Here we provide two more examples for employing different debiasing methods.\n",
        "\n",
        "- Only using the adversarial training for bias mitigation\n",
        "\n",
        "    We need to remove the options that are not related to adversarial training.\n",
        "\n",
        "    ```python\n",
        "    debiasing_args = {\n",
        "        \"dataset\":Shared_options[\"dataset\"], \n",
        "        \"data_dir\":Shared_options[\"data_dir\"],\n",
        "        \"device_id\":Shared_options[\"device_id\"],\n",
        "\n",
        "        # Exp name\n",
        "        \"exp_id\":\"Adv\",\n",
        "\n",
        "        # Perform adversarial training if True\n",
        "        \"adv_debiasing\":True,\n",
        "\n",
        "        # Remove the hyperparameters for Balanced Training\n",
        "        # \"BT\":\"Resampling\",\n",
        "        # \"BTObj\":\"EO\",\n",
        "    }\n",
        "    ```\n",
        "\n",
        "\n",
        "- Use more debiasing methods simultaneously\n",
        "\n",
        "    In addition to balanced training and adversarial training, employ FairBatch ([Roh te al. 2021](https://github.com/yuji-roh/fairbatch)) for bias mitigation\n",
        "    \n",
        "    We can direct add FairBatch options to the argument dict as follows,\n",
        "    ```python\n",
        "        debiasing_args = {\n",
        "            \"dataset\":Shared_options[\"dataset\"], \n",
        "            \"data_dir\":Shared_options[\"data_dir\"],\n",
        "            \"device_id\":Shared_options[\"device_id\"],\n",
        "\n",
        "            # Exp name\n",
        "            \"exp_id\":\"BT_Adv_FairBatch\",\n",
        "\n",
        "            # Perform adversarial training if True\n",
        "            \"adv_debiasing\":True,\n",
        "\n",
        "            # Specify the hyperparameters for Balanced Training\n",
        "            \"BT\":\"Resampling\",\n",
        "            \"BTObj\":\"EO\",\n",
        "\n",
        "            # Specify the hyperparameters for FairBatch\n",
        "            \"DyBT\": \"FairBatch\", \n",
        "            \"DyBTObj\": \"stratified_y\" # Equivalent to the EO FairBatch in the original paper\n",
        "        }\n",
        "    ```\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4_RYwXR-95-s"
      },
      "source": [
        "## 4. Analysis\n",
        "\n",
        "Previous sections have demonstrated how to train a model for bias mitigation under different settings. \n",
        "Besides, some other important aspects need to be considered, including,\n",
        "- how to select the desired model when considering both fairness and performance?\n",
        "- how to compare different debiasing methods systematically?\n",
        "- how to present experimental results?\n",
        "\n",
        "The `analysis` component in *fairlib* aims to address problems, which can be used to retrieve results, select models, and compare models."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-PLJ_lYX95-t"
      },
      "source": [
        "### Saved material\n",
        "\n",
        "During the model training, *fairlib* saves results for later analysis, so let's explore what has been stored.\n",
        "\n",
        "The arguments specify the saving dir when initialling the state for training as: `results_dir`/`project_dir`/`dataset`/`exp_id`.\n",
        "\n",
        "The following example shows the information that has been stored for the first epoch (i.e. epoch 0):"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "x0LKo1uu95-t",
        "outputId": "4e48360d-dfb0-4e9e-bbca-77f506cff104"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "dict_keys(['epoch', 'epochs_since_improvement', 'loss', 'valid_confusion_matrices', 'test_confusion_matrices', 'dev_evaluations', 'test_evaluations'])\n"
          ]
        }
      ],
      "source": [
        "import torch\n",
        "\n",
        "path = \"{results_dir}/{project_dir}/{dataset}/{exp_id}/{checkpoint_dir}/{checkpoint_name}{epoch}.pth.tar\"\n",
        "\n",
        "# Path to the first epoch\n",
        "path_vanilla_epoch0 = path.format(\n",
        "    exp_id = \"vanilla\",\n",
        "    epoch = \"0\",\n",
        "    results_dir=Shared_options[\"results_dir\"],\n",
        "    project_dir=Shared_options[\"project_dir\"],\n",
        "    dataset=Shared_options[\"dataset\"],\n",
        "    checkpoint_dir=Shared_options[\"checkpoint_dir\"],\n",
        "    checkpoint_name=Shared_options[\"checkpoint_name\"],\n",
        ")\n",
        "\n",
        "epoch_results = torch.load(path_vanilla_epoch0)\n",
        "# The keys for saved items\n",
        "print(epoch_results.keys())"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hZfmZg5x4cmc"
      },
      "source": [
        "The printed information during the model training, such as evaluation results over validation and test set, have been stored for each epoch."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "p3iW2W_U95-t",
        "outputId": "9650b6f6-144a-434e-ad27-6c7473461880"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "{'accuracy': 0.7255, 'macro_fscore': 0.7244493079894455, 'micro_fscore': 0.7255, 'TPR_GAP': 0.4006709956925445, 'FPR_GAP': 0.40067100170260955, 'PPR_GAP': 0.39099999902250004}\n"
          ]
        }
      ],
      "source": [
        "print(epoch_results[\"dev_evaluations\"])"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FK6ZxZCr4cmc"
      },
      "source": [
        "Moreover, *fairlib* will also save the **confusion matrix** for each epoch. Any confusion-matrix based scores can be post-calculated in later analysis without the need for retraining the models."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "ec3ab6KE95-u"
      },
      "outputs": [],
      "source": [
        "from fairlib import analysis"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5nXxD6RL4cmd"
      },
      "source": [
        "### How to select the desired model when considering both fairness and performance?\n",
        "\n",
        "As discussed in Section 4 of our paper, there are different ways of selecting the best model, and here we use the DTO metric for epoch selection."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DExIbSd6Very"
      },
      "source": [
        "`model_selection` retrieves experimental results for a single method, selects the desired **epoch** for each run, and saves the resulting df for a later process."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 164
        },
        "id": "A3RixGf695-u",
        "outputId": "e99a5f31-8c70-4ede-f2ab-a337cec6bb5e"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n",
            "[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s remaining:    0.0s\n",
            "[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s finished\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "\n",
              "  <div id=\"df-e3634b56-3952-4a96-af30-9e3193bf3f5f\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th>epoch</th>\n",
              "      <th>dev_fairness</th>\n",
              "      <th>dev_performance</th>\n",
              "      <th>dev_DTO</th>\n",
              "      <th>test_fairness</th>\n",
              "      <th>test_performance</th>\n",
              "      <th>test_DTO</th>\n",
              "      <th>opt_dir</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>BT</th>\n",
              "      <th>BTObj</th>\n",
              "      <th>adv_debiasing</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>NaN</th>\n",
              "      <th>NaN</th>\n",
              "      <th>False</th>\n",
              "      <td>0</td>\n",
              "      <td>0.617075</td>\n",
              "      <td>0.727</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0.624079</td>\n",
              "      <td>0.717554</td>\n",
              "      <td>0.0</td>\n",
              "      <td>results/dev/Moji/vanilla/opt.yaml</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-e3634b56-3952-4a96-af30-9e3193bf3f5f')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-e3634b56-3952-4a96-af30-9e3193bf3f5f button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-e3634b56-3952-4a96-af30-9e3193bf3f5f');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ],
            "text/plain": [
              "                         epoch  dev_fairness  dev_performance  dev_DTO  \\\n",
              "BT  BTObj adv_debiasing                                                  \n",
              "NaN NaN   False              0      0.617075            0.727      0.0   \n",
              "\n",
              "                         test_fairness  test_performance  test_DTO  \\\n",
              "BT  BTObj adv_debiasing                                              \n",
              "NaN NaN   False               0.624079          0.717554       0.0   \n",
              "\n",
              "                                                   opt_dir  \n",
              "BT  BTObj adv_debiasing                                     \n",
              "NaN NaN   False          results/dev/Moji/vanilla/opt.yaml  "
            ]
          },
          "execution_count": 17,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "analysis.model_selection(\n",
        "    # exp_id started with model_id will be treated as the same method, e.g, vanilla, and adv\n",
        "    model_id= (\"vanilla\"),\n",
        "\n",
        "    # the tuned hyperparameters of a methods, which will be used to group multiple runs together.\n",
        "    # This option is generally used for differentiating models with the same debiasing method but \n",
        "    # with different method-specific hyperparameters, such as the strength of adversarial loss for Adv\n",
        "    # Random seeds should not be included here, such that, random runs with same hyperparameters can\n",
        "    # be aggregated to present the statistics of the results. \n",
        "    index_column_names = [\"BT\", \"BTObj\", \"adv_debiasing\"],\n",
        "\n",
        "    # to convenient the further analysis, we will store the resulting DataFrame to the specified path\n",
        "    save_path = r\"results/Vanilla_df.pkl\",\n",
        "\n",
        "    # Follwoing options are predefined\n",
        "    results_dir= Shared_options[\"results_dir\"],\n",
        "    project_dir= Shared_options[\"project_dir\"]+\"/\"+Shared_options[\"dataset\"],\n",
        "    GAP_metric_name = Shared_options[\"GAP_metric_name\"],\n",
        "    Performance_metric_name = Shared_options[\"Performance_metric_name\"],\n",
        "    # We use DTO for epoch selection\n",
        "    selection_criterion = Shared_options[\"selection_criterion\"],\n",
        "    checkpoint_dir= Shared_options[\"checkpoint_dir\"],\n",
        "    checkpoint_name= Shared_options[\"checkpoint_name\"],\n",
        "    # If retrive results in parallel\n",
        "    n_jobs=Shared_options[\"n_jobs\"],\n",
        ")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 228
        },
        "id": "A5yIesY295-u",
        "outputId": "63195724-1094-4978-f0a3-8703a8bdfb8e"
      },
      "outputs": [
        {
          "name": "stderr",
          "output_type": "stream",
          "text": [
            "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n",
            "[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s remaining:    0.0s\n",
            "[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s finished\n"
          ]
        },
        {
          "data": {
            "text/html": [
              "\n",
              "  <div id=\"df-cf34b44f-d60f-4db9-a1c5-50533a85f966\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th>epoch</th>\n",
              "      <th>dev_fairness</th>\n",
              "      <th>dev_performance</th>\n",
              "      <th>dev_DTO</th>\n",
              "      <th>test_fairness</th>\n",
              "      <th>test_performance</th>\n",
              "      <th>test_DTO</th>\n",
              "      <th>opt_dir</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>BT</th>\n",
              "      <th>BTObj</th>\n",
              "      <th>adv_debiasing</th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>Resampling</th>\n",
              "      <th>EO</th>\n",
              "      <th>True</th>\n",
              "      <td>0</td>\n",
              "      <td>0.902757</td>\n",
              "      <td>0.757</td>\n",
              "      <td>0.003919</td>\n",
              "      <td>0.896981</td>\n",
              "      <td>0.753627</td>\n",
              "      <td>0.007047</td>\n",
              "      <td>results/dev/Moji/BT_Adv/opt.yaml</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-cf34b44f-d60f-4db9-a1c5-50533a85f966')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-cf34b44f-d60f-4db9-a1c5-50533a85f966 button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-cf34b44f-d60f-4db9-a1c5-50533a85f966');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ],
            "text/plain": [
              "                                epoch  dev_fairness  dev_performance  \\\n",
              "BT         BTObj adv_debiasing                                         \n",
              "Resampling EO    True               0      0.902757            0.757   \n",
              "\n",
              "                                 dev_DTO  test_fairness  test_performance  \\\n",
              "BT         BTObj adv_debiasing                                              \n",
              "Resampling EO    True           0.003919       0.896981          0.753627   \n",
              "\n",
              "                                test_DTO                           opt_dir  \n",
              "BT         BTObj adv_debiasing                                              \n",
              "Resampling EO    True           0.007047  results/dev/Moji/BT_Adv/opt.yaml  "
            ]
          },
          "execution_count": 18,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "analysis.model_selection(\n",
        "    model_id= (\"BT_Adv\"),\n",
        "    index_column_names = [\"BT\", \"BTObj\", \"adv_debiasing\"],\n",
        "    save_path = r\"results/BT_ADV_df.pkl\",\n",
        "    # Follwoing options are predefined\n",
        "    results_dir= Shared_options[\"results_dir\"],\n",
        "    project_dir= Shared_options[\"project_dir\"]+\"/\"+Shared_options[\"dataset\"],\n",
        "    GAP_metric_name = Shared_options[\"GAP_metric_name\"],\n",
        "    Performance_metric_name = Shared_options[\"Performance_metric_name\"],\n",
        "    selection_criterion = Shared_options[\"selection_criterion\"],\n",
        "    checkpoint_dir= Shared_options[\"checkpoint_dir\"],\n",
        "    checkpoint_name= Shared_options[\"checkpoint_name\"],\n",
        "    n_jobs=Shared_options[\"n_jobs\"],\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1W0yGrsnV6_g"
      },
      "source": [
        "We have preprocessed the results with the `model_selection` function, and the resulting dfs can be downloaded as follows:"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "njuqG-UnL5Ku",
        "outputId": "44b909e3-3237-4b41-8474-aebd97c6b70f"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "--2022-05-02 02:53:27--  https://docs.google.com/uc?export=download&id=1M0G6PyPuDC8Y_2nL9XKYCt10IUzbSvfl\n",
            "Resolving docs.google.com (docs.google.com)... 74.125.195.102, 74.125.195.138, 74.125.195.139, ...\n",
            "Connecting to docs.google.com (docs.google.com)|74.125.195.102|:443... connected.\n",
            "HTTP request sent, awaiting response... 303 See Other\n",
            "Location: https://doc-0g-0k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/0bdo761p58r1ii9ush0jp9bsgtg7n5hh/1651459950000/17527887236587461918/*/1M0G6PyPuDC8Y_2nL9XKYCt10IUzbSvfl?e=download [following]\n",
            "Warning: wildcards not supported in HTTP.\n",
            "--2022-05-02 02:53:29--  https://doc-0g-0k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/0bdo761p58r1ii9ush0jp9bsgtg7n5hh/1651459950000/17527887236587461918/*/1M0G6PyPuDC8Y_2nL9XKYCt10IUzbSvfl?e=download\n",
            "Resolving doc-0g-0k-docs.googleusercontent.com (doc-0g-0k-docs.googleusercontent.com)... 74.125.142.132, 2607:f8b0:400e:c08::84\n",
            "Connecting to doc-0g-0k-docs.googleusercontent.com (doc-0g-0k-docs.googleusercontent.com)|74.125.142.132|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 790461 (772K) [application/x-gzip]\n",
            "Saving to: ‘retrived_results.tar.gz’\n",
            "\n",
            "retrived_results.ta 100%[===================>] 771.93K  --.-KB/s    in 0.006s  \n",
            "\n",
            "2022-05-02 02:53:29 (128 MB/s) - ‘retrived_results.tar.gz’ saved [790461/790461]\n",
            "\n"
          ]
        }
      ],
      "source": [
        "!wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=1M0G6PyPuDC8Y_2nL9XKYCt10IUzbSvfl' -O retrived_results.tar.gz"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "id": "u7goqTOjL5D7"
      },
      "outputs": [],
      "source": [
        "!tar -xf retrived_results.tar.gz"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sjpZXi6FWUCw"
      },
      "source": [
        "Here we demonstrate the application of `final_results_df`, which loads cached results with `retrive_results` for all methods, select the best hyperparameter combinations for each technique, and present the result in a DataFrame"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "id": "DFDJNtnRCwJa"
      },
      "outputs": [],
      "source": [
        "?analysis.final_results_df"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "u672XV4_NL9H"
      },
      "outputs": [],
      "source": [
        "Moji_results = analysis.retrive_results(\"Moji\", log_dir=\"analysis/results\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 632
        },
        "id": "XHgAL1NINdPe",
        "outputId": "0ae82d13-a095-4154-9ed8-53615fadab9b"
      },
      "outputs": [
        {
          "data": {
            "text/html": [
              "\n",
              "  <div id=\"df-64334087-1f85-431d-a8cb-1e462a2d3bfe\">\n",
              "    <div class=\"colab-df-container\">\n",
              "      <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Models</th>\n",
              "      <th>test_performance mean</th>\n",
              "      <th>test_performance std</th>\n",
              "      <th>test_fairness mean</th>\n",
              "      <th>test_fairness std</th>\n",
              "      <th>dev_performance mean</th>\n",
              "      <th>dev_performance std</th>\n",
              "      <th>dev_fairness mean</th>\n",
              "      <th>dev_fairness std</th>\n",
              "      <th>DTO</th>\n",
              "      <th>is_pareto</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>GatedDAdv</td>\n",
              "      <td>0.750163</td>\n",
              "      <td>0.006945</td>\n",
              "      <td>0.908679</td>\n",
              "      <td>0.021678</td>\n",
              "      <td>0.745600</td>\n",
              "      <td>0.004828</td>\n",
              "      <td>0.928670</td>\n",
              "      <td>0.022488</td>\n",
              "      <td>0.266004</td>\n",
              "      <td>False</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>Adv</td>\n",
              "      <td>0.756414</td>\n",
              "      <td>0.007271</td>\n",
              "      <td>0.893286</td>\n",
              "      <td>0.005623</td>\n",
              "      <td>0.747425</td>\n",
              "      <td>0.004549</td>\n",
              "      <td>0.912125</td>\n",
              "      <td>0.008507</td>\n",
              "      <td>0.265936</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>FairBatch</td>\n",
              "      <td>0.751488</td>\n",
              "      <td>0.005772</td>\n",
              "      <td>0.904373</td>\n",
              "      <td>0.008213</td>\n",
              "      <td>0.746050</td>\n",
              "      <td>0.003896</td>\n",
              "      <td>0.914526</td>\n",
              "      <td>0.006020</td>\n",
              "      <td>0.266276</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>DAdv</td>\n",
              "      <td>0.755464</td>\n",
              "      <td>0.004076</td>\n",
              "      <td>0.904023</td>\n",
              "      <td>0.011218</td>\n",
              "      <td>0.748550</td>\n",
              "      <td>0.002405</td>\n",
              "      <td>0.915601</td>\n",
              "      <td>0.005007</td>\n",
              "      <td>0.262697</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>DelayedCLS_Adv</td>\n",
              "      <td>0.761015</td>\n",
              "      <td>0.003081</td>\n",
              "      <td>0.882425</td>\n",
              "      <td>0.015918</td>\n",
              "      <td>0.751675</td>\n",
              "      <td>0.003481</td>\n",
              "      <td>0.899346</td>\n",
              "      <td>0.011417</td>\n",
              "      <td>0.266341</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>BTEO</td>\n",
              "      <td>0.753927</td>\n",
              "      <td>0.001433</td>\n",
              "      <td>0.877469</td>\n",
              "      <td>0.003756</td>\n",
              "      <td>0.746325</td>\n",
              "      <td>0.000998</td>\n",
              "      <td>0.896874</td>\n",
              "      <td>0.005401</td>\n",
              "      <td>0.274892</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>GDEO</td>\n",
              "      <td>0.752763</td>\n",
              "      <td>0.004999</td>\n",
              "      <td>0.892255</td>\n",
              "      <td>0.007860</td>\n",
              "      <td>0.749350</td>\n",
              "      <td>0.003494</td>\n",
              "      <td>0.912672</td>\n",
              "      <td>0.002766</td>\n",
              "      <td>0.269694</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>BTGatedAdv</td>\n",
              "      <td>0.735459</td>\n",
              "      <td>0.028830</td>\n",
              "      <td>0.866150</td>\n",
              "      <td>0.028232</td>\n",
              "      <td>0.730150</td>\n",
              "      <td>0.024594</td>\n",
              "      <td>0.886862</td>\n",
              "      <td>0.030537</td>\n",
              "      <td>0.296476</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>FairSCL</td>\n",
              "      <td>0.757314</td>\n",
              "      <td>0.003441</td>\n",
              "      <td>0.878219</td>\n",
              "      <td>0.004314</td>\n",
              "      <td>0.752825</td>\n",
              "      <td>0.001872</td>\n",
              "      <td>0.898325</td>\n",
              "      <td>0.002579</td>\n",
              "      <td>0.271527</td>\n",
              "      <td>False</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>OldFairBatch</td>\n",
              "      <td>0.750638</td>\n",
              "      <td>0.006012</td>\n",
              "      <td>0.905537</td>\n",
              "      <td>0.005046</td>\n",
              "      <td>0.744525</td>\n",
              "      <td>0.004995</td>\n",
              "      <td>0.917734</td>\n",
              "      <td>0.004761</td>\n",
              "      <td>0.266655</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>GatedBTEO</td>\n",
              "      <td>0.762106</td>\n",
              "      <td>0.002592</td>\n",
              "      <td>0.900764</td>\n",
              "      <td>0.014701</td>\n",
              "      <td>0.759775</td>\n",
              "      <td>0.003798</td>\n",
              "      <td>0.909445</td>\n",
              "      <td>0.006631</td>\n",
              "      <td>0.257762</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>BTFairBatch</td>\n",
              "      <td>0.746837</td>\n",
              "      <td>0.003407</td>\n",
              "      <td>0.899351</td>\n",
              "      <td>0.004936</td>\n",
              "      <td>0.743975</td>\n",
              "      <td>0.004236</td>\n",
              "      <td>0.919254</td>\n",
              "      <td>0.004731</td>\n",
              "      <td>0.272437</td>\n",
              "      <td>False</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>GatedAdv</td>\n",
              "      <td>0.753113</td>\n",
              "      <td>0.005196</td>\n",
              "      <td>0.890065</td>\n",
              "      <td>0.013302</td>\n",
              "      <td>0.748975</td>\n",
              "      <td>0.003805</td>\n",
              "      <td>0.910838</td>\n",
              "      <td>0.010314</td>\n",
              "      <td>0.270257</td>\n",
              "      <td>False</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>INLP</td>\n",
              "      <td>0.733433</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.855982</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.727625</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.859686</td>\n",
              "      <td>NaN</td>\n",
              "      <td>0.302983</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>GDMean</td>\n",
              "      <td>0.752163</td>\n",
              "      <td>0.002130</td>\n",
              "      <td>0.901389</td>\n",
              "      <td>0.003916</td>\n",
              "      <td>0.749050</td>\n",
              "      <td>0.001368</td>\n",
              "      <td>0.922430</td>\n",
              "      <td>0.005829</td>\n",
              "      <td>0.266735</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>Vanilla</td>\n",
              "      <td>0.722981</td>\n",
              "      <td>0.004576</td>\n",
              "      <td>0.611870</td>\n",
              "      <td>0.014356</td>\n",
              "      <td>0.726650</td>\n",
              "      <td>0.003673</td>\n",
              "      <td>0.632302</td>\n",
              "      <td>0.013370</td>\n",
              "      <td>0.476849</td>\n",
              "      <td>True</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "      <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-64334087-1f85-431d-a8cb-1e462a2d3bfe')\"\n",
              "              title=\"Convert this dataframe to an interactive table.\"\n",
              "              style=\"display:none;\">\n",
              "        \n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "       width=\"24px\">\n",
              "    <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
              "    <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
              "  </svg>\n",
              "      </button>\n",
              "      \n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      flex-wrap:wrap;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "      <script>\n",
              "        const buttonEl =\n",
              "          document.querySelector('#df-64334087-1f85-431d-a8cb-1e462a2d3bfe button.colab-df-convert');\n",
              "        buttonEl.style.display =\n",
              "          google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "        async function convertToInteractive(key) {\n",
              "          const element = document.querySelector('#df-64334087-1f85-431d-a8cb-1e462a2d3bfe');\n",
              "          const dataTable =\n",
              "            await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                     [key], {});\n",
              "          if (!dataTable) return;\n",
              "\n",
              "          const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "            '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "            + ' to learn more about interactive tables.';\n",
              "          element.innerHTML = '';\n",
              "          dataTable['output_type'] = 'display_data';\n",
              "          await google.colab.output.renderOutput(dataTable, element);\n",
              "          const docLink = document.createElement('div');\n",
              "          docLink.innerHTML = docLinkHtml;\n",
              "          element.appendChild(docLink);\n",
              "        }\n",
              "      </script>\n",
              "    </div>\n",
              "  </div>\n",
              "  "
            ],
            "text/plain": [
              "            Models  test_performance mean  test_performance std  \\\n",
              "0        GatedDAdv               0.750163              0.006945   \n",
              "1              Adv               0.756414              0.007271   \n",
              "2        FairBatch               0.751488              0.005772   \n",
              "3             DAdv               0.755464              0.004076   \n",
              "4   DelayedCLS_Adv               0.761015              0.003081   \n",
              "5             BTEO               0.753927              0.001433   \n",
              "6             GDEO               0.752763              0.004999   \n",
              "7       BTGatedAdv               0.735459              0.028830   \n",
              "8          FairSCL               0.757314              0.003441   \n",
              "9     OldFairBatch               0.750638              0.006012   \n",
              "10       GatedBTEO               0.762106              0.002592   \n",
              "11     BTFairBatch               0.746837              0.003407   \n",
              "12        GatedAdv               0.753113              0.005196   \n",
              "13            INLP               0.733433                   NaN   \n",
              "14          GDMean               0.752163              0.002130   \n",
              "15         Vanilla               0.722981              0.004576   \n",
              "\n",
              "    test_fairness mean  test_fairness std  dev_performance mean  \\\n",
              "0             0.908679           0.021678              0.745600   \n",
              "1             0.893286           0.005623              0.747425   \n",
              "2             0.904373           0.008213              0.746050   \n",
              "3             0.904023           0.011218              0.748550   \n",
              "4             0.882425           0.015918              0.751675   \n",
              "5             0.877469           0.003756              0.746325   \n",
              "6             0.892255           0.007860              0.749350   \n",
              "7             0.866150           0.028232              0.730150   \n",
              "8             0.878219           0.004314              0.752825   \n",
              "9             0.905537           0.005046              0.744525   \n",
              "10            0.900764           0.014701              0.759775   \n",
              "11            0.899351           0.004936              0.743975   \n",
              "12            0.890065           0.013302              0.748975   \n",
              "13            0.855982                NaN              0.727625   \n",
              "14            0.901389           0.003916              0.749050   \n",
              "15            0.611870           0.014356              0.726650   \n",
              "\n",
              "    dev_performance std  dev_fairness mean  dev_fairness std       DTO  \\\n",
              "0              0.004828           0.928670          0.022488  0.266004   \n",
              "1              0.004549           0.912125          0.008507  0.265936   \n",
              "2              0.003896           0.914526          0.006020  0.266276   \n",
              "3              0.002405           0.915601          0.005007  0.262697   \n",
              "4              0.003481           0.899346          0.011417  0.266341   \n",
              "5              0.000998           0.896874          0.005401  0.274892   \n",
              "6              0.003494           0.912672          0.002766  0.269694   \n",
              "7              0.024594           0.886862          0.030537  0.296476   \n",
              "8              0.001872           0.898325          0.002579  0.271527   \n",
              "9              0.004995           0.917734          0.004761  0.266655   \n",
              "10             0.003798           0.909445          0.006631  0.257762   \n",
              "11             0.004236           0.919254          0.004731  0.272437   \n",
              "12             0.003805           0.910838          0.010314  0.270257   \n",
              "13                  NaN           0.859686               NaN  0.302983   \n",
              "14             0.001368           0.922430          0.005829  0.266735   \n",
              "15             0.003673           0.632302          0.013370  0.476849   \n",
              "\n",
              "    is_pareto  \n",
              "0       False  \n",
              "1        True  \n",
              "2        True  \n",
              "3        True  \n",
              "4        True  \n",
              "5        True  \n",
              "6        True  \n",
              "7        True  \n",
              "8       False  \n",
              "9        True  \n",
              "10       True  \n",
              "11      False  \n",
              "12      False  \n",
              "13       True  \n",
              "14       True  \n",
              "15       True  "
            ]
          },
          "execution_count": 23,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "Moji_main_results = analysis.final_results_df(\n",
        "    results_dict = Moji_results,\n",
        "    pareto = False,\n",
        "    pareto_selection = \"test\",\n",
        "    selection_criterion = \"DTO\",\n",
        "    return_dev = True,\n",
        "    # Fairness_threshold=0.95,\n",
        "    # return_conf=True,\n",
        "    # save_conf_dir=r\"D:\\Project\\Fair_NLP_Classification\\analysis\\reproduce\\Moji\"\n",
        "    )\n",
        "Moji_main_results"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "qv8TSTYRNoue",
        "outputId": "adea3cab-40a3-4945-d25d-b12b0cec7c5f"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "\\begin{tabular}{lrrrrrrrrrl}\n",
            "\\toprule\n",
            "        Models &  test\\_performance mean &  test\\_performance std &  test\\_fairness mean &  test\\_fairness std &  dev\\_performance mean &  dev\\_performance std &  dev\\_fairness mean &  dev\\_fairness std &      DTO &  is\\_pareto \\\\\n",
            "\\midrule\n",
            "     GatedDAdv &               0.750163 &              0.006945 &            0.908679 &           0.021678 &              0.745600 &             0.004828 &           0.928670 &          0.022488 & 0.266004 &      False \\\\\n",
            "           Adv &               0.756414 &              0.007271 &            0.893286 &           0.005623 &              0.747425 &             0.004549 &           0.912125 &          0.008507 & 0.265936 &       True \\\\\n",
            "     FairBatch &               0.751488 &              0.005772 &            0.904373 &           0.008213 &              0.746050 &             0.003896 &           0.914526 &          0.006020 & 0.266276 &       True \\\\\n",
            "          DAdv &               0.755464 &              0.004076 &            0.904023 &           0.011218 &              0.748550 &             0.002405 &           0.915601 &          0.005007 & 0.262697 &       True \\\\\n",
            "DelayedCLS\\_Adv &               0.761015 &              0.003081 &            0.882425 &           0.015918 &              0.751675 &             0.003481 &           0.899346 &          0.011417 & 0.266341 &       True \\\\\n",
            "          BTEO &               0.753927 &              0.001433 &            0.877469 &           0.003756 &              0.746325 &             0.000998 &           0.896874 &          0.005401 & 0.274892 &       True \\\\\n",
            "          GDEO &               0.752763 &              0.004999 &            0.892255 &           0.007860 &              0.749350 &             0.003494 &           0.912672 &          0.002766 & 0.269694 &       True \\\\\n",
            "    BTGatedAdv &               0.735459 &              0.028830 &            0.866150 &           0.028232 &              0.730150 &             0.024594 &           0.886862 &          0.030537 & 0.296476 &       True \\\\\n",
            "       FairSCL &               0.757314 &              0.003441 &            0.878219 &           0.004314 &              0.752825 &             0.001872 &           0.898325 &          0.002579 & 0.271527 &      False \\\\\n",
            "  OldFairBatch &               0.750638 &              0.006012 &            0.905537 &           0.005046 &              0.744525 &             0.004995 &           0.917734 &          0.004761 & 0.266655 &       True \\\\\n",
            "     GatedBTEO &               0.762106 &              0.002592 &            0.900764 &           0.014701 &              0.759775 &             0.003798 &           0.909445 &          0.006631 & 0.257762 &       True \\\\\n",
            "   BTFairBatch &               0.746837 &              0.003407 &            0.899351 &           0.004936 &              0.743975 &             0.004236 &           0.919254 &          0.004731 & 0.272437 &      False \\\\\n",
            "      GatedAdv &               0.753113 &              0.005196 &            0.890065 &           0.013302 &              0.748975 &             0.003805 &           0.910838 &          0.010314 & 0.270257 &      False \\\\\n",
            "          INLP &               0.733433 &                   NaN &            0.855982 &                NaN &              0.727625 &                  NaN &           0.859686 &               NaN & 0.302983 &       True \\\\\n",
            "        GDMean &               0.752163 &              0.002130 &            0.901389 &           0.003916 &              0.749050 &             0.001368 &           0.922430 &          0.005829 & 0.266735 &       True \\\\\n",
            "       Vanilla &               0.722981 &              0.004576 &            0.611870 &           0.014356 &              0.726650 &             0.003673 &           0.632302 &          0.013370 & 0.476849 &       True \\\\\n",
            "\\bottomrule\n",
            "\\end{tabular}\n",
            "\n"
          ]
        }
      ],
      "source": [
        "print(Moji_main_results.to_latex(index=False))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "id": "EKIO6OgBNwTo"
      },
      "outputs": [],
      "source": [
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "from pathlib import Path\n",
        "def make_plot(plot_df, figure_name=None):\n",
        "    plot_df[\"Fairness\"] = plot_df[\"test_fairness mean\"]\n",
        "    plot_df[\"Accuracy\"] = plot_df[\"test_performance mean\"]\n",
        "\n",
        "    figure = plt.figure(figsize=(6, 6), dpi = 150) \n",
        "    with sns.axes_style(\"white\"):\n",
        "        sns.lineplot(\n",
        "            data=plot_df,\n",
        "            x=\"Accuracy\",\n",
        "            y=\"Fairness\",\n",
        "            hue=\"Models\",\n",
        "            markers=True,\n",
        "            style=\"Models\",\n",
        "        )\n",
        "    if figure_name is not None:\n",
        "        figure.savefig(Path(r\"plots\") / figure_name, dpi=960, bbox_inches=\"tight\") "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 789
        },
        "id": "E_dupXSDN6ve",
        "outputId": "ad994bc1-c24b-48dd-f9c6-06b7f397011f"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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Any3mrXpVL2mU2P4e3mVOL6S2rZtG5MmTSIgIIB33nmH1q1bU7lyZevT7Dt06EBycrJTffr4+DhV38PDg1atWhEVFUV4eDgnTpxgw4YNPPHEE9SsWZOyZcuSlpbG/v37rUmPiIiIyJ1ICcwdxMfDA59r+O19WS8vynp5MdBozNTtcTZlg4wmVLxqyZSXuwde3rf+bMGqVasAGDNmjN1Ss/T0dE6dOnXDYvHz86NZs2acOHGCM2fyViG6u7vTsWNHvv/+e7777jslMCIiInJHuzXX+8gtrWftejbPhans60fP2q713Jcr5T/npWrVqnZlK1assO6FKQ3F6evw4cN28QwaNAg3NzfmzJnDwYMHC22/ZcttcXq3iIiIiENKYMRpPh4ePGs0tr4faDRxuee+XKl27doALFiwwGYPzIEDB5g6dWqpjmWaJoMHD2b9+vVYLBabsqysLD744APi4+Px8/Pj/vvvt5Y1a9aM5557jvT0dJ599lnWrl1r1/e5c+f497//zYABA0o1ZhEREZFbiZaQSYn0rF2P9JzsS9+77uwLQO/evYmKimLNmjWEh4cTGhrK2bNniY2NpUuXLuzcuZPExMRSGSs3N5eNGzeyceNGKlSoQKNGjbjrrrs4e/Ys8fHxJCcn4+npyYQJE6hYsaJN21deeQUPDw9mzJjB0KFDCQoKomHDhvj6+nLixAm2b99OVlaWNSG72ogRI6z7eq7WqVMnhg8fXir3KCIiInI9KYGREvHx8KB/g8ZFV3QBgYGBLFiwgClTphAbG0t0dDTBwcGMGjWKIUOG0LVr11Ibq379+nzxxRds2LCBuLg4Dh06RGxsLJ6entSoUYPOnTvTv39/hw+sdHNzY8yYMTz22GN8+eWX/Prrr/zyyy9kZmYSGBhIhw4dePTRR3nkkUccjr13794C46pTp06p3aOIiIjI9eRWmuv7pXQZhrG7Xr16jZYtW1ZoPYvFgmma+W1wv0WPMhaRktO/cxERuZ10796dAwcO7DFN0+nfiOt/QBERERERcRlKYERERERExGUogREREREREZehBEZERERERFyGEhgREREREXEZSmBERERERMRlKIERERERERGXoQRGRERERERchhIYERERERFxGUpgRERERETEZSiBERERERERl6EERkREREREXIYSGBERERERcRlKYOSOkJKSQmRkJL17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tpZduR9o0qRJREVF4e7uTvPmzalRowYnT55ky5YtnDhxwmEC88orr7B27VratGnDPffcQ1xcHJ999hlJSUlMnTq12D8nERERuT3c2p8wpVRlZueSVcRKLzc3KON9eRYlx5LLhcxcZv2SwbmMwtumpkNquoX9Jy1sO5pN4+ruuF+akfH3udynJTeXi5mX27m7g5/XjZu5OX/+PHv37uXdd98F4Mknn6RcuXI3bPwnnniC8ePHU6lSJes1i8XCRx99RGRkJP/617+ssRXH2rVr6dq1K9OmTcPHx6fI+haLhZMnT7JkyRIWL15MuXLl6Nevn02du+66i6ioKNq2bWszq3bkyBGeffZZPvroI3r16mWdWZk0aRIRERH8/vvvDB061OEm/sWLFxMVFUWVKlWYMWOG9VABgPT0dDZv3mzXJjExEV9fX1auXGlNio4cOULv3r1ZunQpo0aNKvWldSIiInJrUwJzB1m6M8tu6dfVKpV1Y3rfy78xTzhl4e/L0gtp4VhaOrz45UUAvDxg1gB/a9kfabm8vOCi9X3dyu5MeOz6HuPr6Dhlf39/3nzzTZ5++ulSHatLly4Or+efznXffffZlbm7uzNixAj+97//OX1ssLe3N2+++WahycsHH3zg8DjlDh06MH78eGrWrGlzPTAwkHbt2tnVr1mzJi+99BJvvPEGa9asoX///sWO8z//+Q8Ar7/+uk3yAuDr60v79u0dtnvjjTdsZnRq1qxJz549+e9//0tcXJwSGBERkTuMEhgpddXLuXHmYi7phedKN9SVxyhnZmZy7Ngxtm/fzocffkjNmjXp1KlTqY1V0DHKV864nDlzhujoaPbv309qaioWS96BCNnZ2aSkpJCSkkKFChWKNV7jxo2LXHJ25THKkLfsbO/evWzcuJHp06czadIkh8vO4uLi2LRpE0lJSWRmZpKbm0tycjKQd7x0cSUlJXHw4EHKlSvHI488Uux2Xl5eDmdzateuDWCNRURERO4cSmCkVFUr58Ybj/jy2sKLRVe+gRwdf7xnzx6eeeYZhg0bxtKlS+32gZRUUccof/fdd7z55ptcuHChwDrnz58vdgJTvXr1Ius4OkY5MzOT//u//2PBggX4+PgwefJka9m5c+cYMWIEv/76a6ExFteJEyeAvNkTZw56qFSpEh4eHnbX/f3zZvQyMzPtykREROT2pgTm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cKGg7qhatSpt2rTh8OHDTJkyhYyMDLp162ZN6kRERERKi5aQSbHVrO/BwV1FLyOr2cD5h0ZeL02aNCEqKoqXX36Zzz//nDlz5tCsWTOqVKlCRkYGJ06cwDRNsrKyqFOnjnVpV+/evYmKimLNmjWEh4cTGhrK2bNniY2NpUuXLuzcudO6KT9fcHAwhmGwa9cu+vTpQ/369XF3d6dz58506dKFcuXK8dFHH/Hiiy/y1ltv8fHHH1O/fn3KlSvHqVOn2LNnD6mpqXz44YfW57a0aNGCwYMHM3PmTPr06UObNm0ICAggNjYWb29vHnzwQZtnwRw8eJDdu3dTtmxZOnXqVOjPpnv37mzdupXFixfTrVs3atasSUREBBMmTGDIkCG0bNmSypUrs23bNlJTU+nRo4d1aZgjPXr04JdffuGrr74CtHxMRERErg/NwEixVavlQb2mnoV+1W/mSbVat04CA3lLo1atWsX48eMJCwvj0KFDrFy5kp9//pnz588THh7Ohx9+yNKlS62JQ2BgIAsWLOCxxx4jKyuL6OhokpKSGDVqFO+9916BY0VGRvLQQw9x5MgRFi1axIIFC2xOO2vevDlLly7lueeeo2zZssTGxvLjjz9y7NgxWrVqxaRJk2jbtq29yvrgAAAgAElEQVRNn3/729+YOHEiderUYdOmTWzatIl27drx1VdfWU9ay5c/+9K1a1d8fArfUPTII4/g4eHBunXrrCefPf3003z44YeEhoayY8cONmzYQEhICPPnz+fuu+8utL9u3bpZxwwKCrIeCy0iIiJSmtxK88GBUroMw9hdr169RsuWLSu0nsViwTTN/Da4uysvFbnd6N+5iIjcTrp3786BAwf2mKbZ2Nm2+h9QRERERERchhIYERERERFxGUpgRERERETEZSiBERERERERl6EERkREREREXIYSGBERERERcRlKYERERERExGUogREREREREZehBEZERERERFyGEhgREREREXEZSmBERERERMRlKIERERERERGXoQRGRERERERchhIYERERERFxGZ43O4BrYRiGH/A68CRQCzgNrADeNE0zsQT91QYigG5ADeAcsB/41jTNKVfV/TvwdiHd/dM0zQhnY5DSZRgGAKZpOrweEBBAdHQ05cqVs2s7Y8YMpk2bxogRIxg5cqT1emRkJB988IHd9YJ07tyZxETbv47+/v7cc889PProo/Tv3x9vb2+n701ERETkTuSyCYxhGL5ANHAfcBxYDNQGBgGPGYZxn2maCU709wiwAPADtgC/AhWBUOAFYEoBTTcCBxxc31zcseXmOXfuHFFRUYwePfq6j9WtWzfKlClDbm4uiYmJbNu2jV27drFmzRpmzpypJEZERESkGFw2gQHeIC95+QV42DTNNADDMP4KTANmAg8UpyPDMEKAb8mbcelqmubPV5S5Ay0Kaf6ZaZqzShC/S7Jk5ZISk0XaXgvV/+KNV3l3ss5aOP6/TMo2dKdCGy/cvdxudpjF4ubmhre3N7Nnz2bgwIGUL1/+uo43duxYgoODre/37t1L//79iY2N5X//+x/PPPPMdR1fRERE5HbgkntgDMPwBkZcejs8P3kBME3zPWAH0MkwjLBidvke4AsMvDJ5udSfxTTNuFII+7aQcdxC0qIszps5HP4wnTQzm8MfpHPezCFpURYZxy03O8Ric3d35y9/+QtpaWnMnDnzho/fsGFDBg4cCMDq1atv+PgiIiIirsglExigPVAeOGia5lYH5QsuvfYoqiPDMGqSt+clwTTN5aUX4u3Jo8zl2ZWs07kc+TSDrDO5DstdwdChQ/H19WXOnDmcOXPmho/fqFEjAI4fP37DxxYRERFxRa66hKzZpdctBZTnX29ajL4eIC+R+9kwDE+gN3kJkgewC5hvmmZhn2w7G4bRnLwZnKPA96Zp3nb7X3ItuWSfzSW9iBmW9OMW3DzAs7wb/7+9O4+Pqrr/P/6a7OwSCIKAoixHARVFUFzYCoIiaC1aN8pqsS51rVX81var/GrdoK2lLlWh3woSd9krilg2dyyKcgAFAUEMm5AA2WZ+f9w7YTKZSWbCTCaTvJ+PB4/L3Hu24TC588lZriel9gczrVq14qqrrmLGjBk899xz3HXXXTVaf0FBAYDWv4iIiIhEKFkDmOPd47Yw1/3nT4igrK7uMR9YhrOuJtD/M8aMtNa+Gyb/qKDXDxpjXsWZjpYfKkOieIt9+EqqSOSB1KwjgYev1Ie3CDb/9RBFeb5KMjq++2chABmtPHS4pUHlVaVDStqRuryFPnxe8KRRo+torr/+enJzc5k5cybjxo0jOzu7xup+913nv5V/VzQRERERqVyyBjCN3ePBMNcL3GOTCMpq7h4n4AQx1+BsxZwD/A64DnjdGNMtaGvmjcBdwELgW7ecvsAjwM9wRnB+GsmbqSm7lxSza3FxpWnSm3vodF/DsteHt3nZ/MThqOsq+sHH+t+F6x7HsSMyyO6bXvZ6x8uF7P+slJaD08kZUnMjEi1btuTqq6/m+eef5x//+Ae//e1v41qfz+dj+/btvPjii8yfPx+Px8NVV10V1zpFRERE6opkDWBiyb8OKA2YaK19yX29FxhlnF+N9wJuBO7zZ7LWvhBUTgEwyxjzLvA5cJm7lfP7cW19LeRx/1dVOdpTi1x//fXMnj2bF198kfHjx9OyZcuY1/GTn/ykwrn09HQmTZrEWWedFfP6REREROqiZA1g/FOzGoa53sg9HoiirHzg5RDXp+MEMP0iaZi1docxZjrO6MxQnOfJ1Csn3JzFlqcOJ1UAk52dzTXXXMOzzz7LM888w6RJk2Jeh/85MB6Ph4YNG3LSSScxaNAgjj322JjXJSIiIlJXJWsAs8U9tgtz3X/+2wjK8qfZYq0Ntchjs3tsFVnTANjgHttEkSfuWgxMLzdlK6SgpSdZ7VLo8qATJ+5aUsSed6uOSvK/LC03DS1sVUFNaXNFJq1/dmQEp6aNHz+eWbNmMXv2bCZMmBDz8oOfAyMiIiIi0UvWbZT/6x7DPWDSf35NBGX5t2FuHua6f0V3NAvy/WUVVJqqhqWke0htUMWfrPIRjCfVOe8t8rF3eWRDKrvfLcZb5KuyrsAF/AApme75BD0IMzs7m1GjRlFYWMgzzzyTkDaIiIiISOWSNYBZAfwIdHS3MA420j3OjaCslcBuoLUJvRWUf+pYqOfNVGCM8XBk8X64bZ6TTmojD5nHOv9dUpt4yGpX/r9OVrsUUps4gUdm6xTSGtX+LZRDGTt2LI0aNSI3N5edO3cmujkiIiIiEiQpAxhrbRHwN/flNGOMf80Lxpg7cJ7/8l7g81iMMTcbY9YZYx4KKqsEmIIzeWqaMaZpQJ5BwBjABzwdcD7HGHOTMabcLmfGmMbAk8DZwPfAazF4u7VCSpqH9uMy6XBLFp1/14C2v8g8Mt3MA+1+kUnn3zWgwy1ZtB+biSctOQOY5s2bM2rUKIqKinjllVeqziAiIiIiNSpZ18AATAYGAecCG4wxy3Ce+3I2kAeMC0rfEjCEXpfyKDDALW+9MeZ9N/05ONsh32et/TAgfSOcAOpPxpiPgB042y6fCbQA9gEjrbWV7yOcZNKappDmhncZ2R4adU6lYH0pjbqkkp7txMINTkhNYAtjY9y4cbzwwgvk51c+a/Dll19m2bJlYa+/9NJLYa+JiIiISPUkbQBjrT1sjBkA3Ivz7JbLgD3ADOB31tpwD7kMVVaxMeZi4HbgF8AQoAh4D5hqrZ0XlGU38DBOgNMFJ4gqBTa59U8NemZMndT2ukxKDzlrXeqSZs2aMXr0aKZNm1Zpup07d2qamYiIiEgN8/h8VT9dXRLDGLO2U6dOXefPn19pOq/Xi7XWn4eUlKScGSgildDnXERE6pJhw4axcePGL6213aLNqzugiIiIiIgkDQUwIiIiIiKSNBTAiIiIiIhI0lAAIyIiIiIiSUMBjIiIiIiIJA0FMCIiIiIikjQUwIiIiIiISNJQACMiIiIiIklDAYyIiIiIiCQNBTAiIiIiIpI0FMCIiIiIiEjSUAAjIiIiIiJJQwGMiIiIiIgkjbREN0CkJhw6dIiXX36ZpUuXsn79evbt20d6ejpt2rThtNNOY/DgwfTv35/U1NSyPAMHDuS7774re52amkrjxo3Jzs6mW7dunH/++Vx88cVkZmaGrDMw/+OPP84ll1wSMt2aNWu44ooryl5ba2PxlkVERETqJAUwUud98skn3HrrreTl5ZGZmcmpp55Kr169KCoqYsuWLbz++uu8/vrrdOrUifnz51fIP2TIEBo2bIjP5yM/P59t27axcOFC5s2bx2OPPcYf//hH+vXrV2kb5s6dGzaAmTNnTkzep4iIiEh9oABGoub9oRiKfBUvZHhIaZVe8w2qxNq1axkzZgxFRUWMHz+eG2+8kcaNG5dLs2PHDqZPn87s2bNDlnH33XfTrl27cufy8vJ48sknmTlzJjfccANPP/00ffv2DZm/a9euLF++nD179pCdnV3uWklJCQsWLKBTp05s2bKFoqKio3i3IiIiInWf1sBIVErXHuTwvVs5fP+2in/u3Urp2oOJbmIZr9fLb37zG4qKirj11lu5++67KwQvAG3atGHSpEnMmjUr4rJzcnK4//77ufXWW/F6vUyaNCls8DF8+HBKSkpYuHBhhWsrVqxg9+7djBgxIvI3JiIiIlKPKYCRiHnziil86gcIMfgCgA8Kn/oBb15xjbYrnPfee4+vv/6a4447jokTJ1aZvnv37lHXMXHiRNq2bUteXl7IAAWctTCNGjUKOVVszpw5eDwehg8fXmk9O3bs4IEHHmDQoEGceuqp9O7dm4kTJ/Lpp59WSOvz+Zg3bx633347Q4YMoUePHpxxxhmMHDmSmTNn4vV6K+R54oknMMbw2muvYa3lhhtuoFevXvTo0YPrrrsuZD0iIiIiiaAARiLiK/RS+LedUFDxy285BV4Kp+3EV1hFuhrwn//8B4ChQ4eWW5wfS6mpqQwZMgSADz74IGSarKwsLrzwQj777DO2bNlSdr6goIB33nmHnj17ctxxx4WtY/Xq1Vx66aXMnDmTtLQ0+vfvT+fOnVm+fDnXXXcdCxYsKJe+qKiIO++8k5UrV9KyZUsGDBhAjx492LhxIw888ACTJk0KW9cXX3zBz3/+c7777jvOP/98TjjhBD766CPGjBnD+vXro/mnEREREYkLBTBSJZ/PR9E/d+HbGtn6DN+WIie9L9xQTc1Yt24dAKecckpc6/GX/80334RN458iFjgKs3jxYg4dOlTp9LH8/HxuueUW8vPzefTRR1m0aBFPPPEEM2fOZPbs2TRu3Jj77ruPPXv2lOVJTU1l2rRpLF++nJkzZzJ16lSmT5/OkiVL6N69O6+//jofffRRyPpmzpzJHXfcwdy5c5k6dSpvvvkmo0ePprCwkGeffTaqfxcRERGReFAAU4/4ir34DpZG9Qeg5O39lL6fH1Vdpe/nU/LWj0fKOnxkRMbn9VVeb3FsRm/27dsHQPPmzUNenzRpEvfcc0+5Px9//HHU9fjL//HHH8OmOeecc8jJyWHu3Lll5+bOnUtGRgZDhw4Nm++VV14hLy+P0aNHVwh0Tj31VG688UYOHjxYLjBKS0tj0KBBpKeX31AhOzubO++8E4B33nknZH1nnnkmv/jFL8qd+9WvfgVQrX8bERERkVjTLmT1SPH8fZTM2RdVnobPn4Tvh+qtaSn9/BDFuc7IQIrJIuu3zjQp354SDt+9NWy+tBHHkHFZdtjrsfLGG29QWlpa7lzv3r0566yzoirHP9Lk8XjCpklJSeGSSy5h+vTprFmzhjZt2rBq1SoGDhxIs2bNwuZbsWIFAIMHDw55vWfPnoDzLJlgX331FcuXL2f79u0cPnwYn89HQUEBAJs3bw5Z3nnnnVfhXPPmzTnmmGP44YcfwrZTREREpKYogJEqpXTKgnf2R53P0yoNvoxDgyJ0zDHHALB3796Q17/88kjj7r//fnJzc6tVj7/8ygIRcKaRTZ8+nblz59K2bVtKS0ur3H3M/yDMq6++OqI2gLMG5t5772XevHlh0/sDmWCtW7cOeb5Ro0ZlI1oiIiIiiaQARqqU0imrevlapVNadbK4Ofnkk/n000/56quv4rpN8VdffQVAp06dKk3XtWtXOnbsyIIFC8jJyaFp06b079+/0jz+HcP8D9MM56STTir7+4wZM5g3bx5dunThN7/5Dd26daNp06akp6ezadOmSqespaRoVqmIiIjUbgpg6pH0YceQfmHlowSheLJT8TRPxbc38nDE0zyVtEHNSOvbxDmRcmR6lSc7jQZ/O6GShoafihWNvn37MmvWLBYtWsRdd90Vl53ISktL+fe//w3A2WefXWX6ESNGMHXqVHbt2sWVV15JRkZGpelbt27Npk2b+OUvfxnxNs+LFy8GYMqUKXTu3Lncta1bw0/dExEREUkG+nVrPeJJT8HTMDWqP+Cs7Yh2FCalcxaeNM+RsrKO/FfzpHgqrzc9Nv8t+/XrR8eOHdm+fTtPP/10TMoM9tRTT7F9+3aOPfZYLrzwwirTX3LJJWVrSi699NIq05977rnAkaAkEvv3O9P9Qk0HC/esGhEREZFkoQBGIhJ1ANOxetPOYiklJYVHHnmEjIwM/vKXv/DII49w4MCBCun27t3Lpk2boio7Ly+PBx98kL/+9a+kpqby0EMPVTmaAtCuXTvef/99Pvjgg4g2C7jqqqto0aIFzz33HLm5uRUeQllSUsKyZcvKPaOlQ4cOALz44ovl0i5atIg333wzgncnIiIiUntpCplEJO28JnDQS/HiH+FgJdscN0whfXAzJ30t0L17d6ZPn85tt93Gc889x7/+9S9OP/10WrVqRWFhId9//z3WWoqLiznppJNCTtN65JFHaNiwYdkuXtu2bWP9+vWUlpaSk5PDQw89FHL3rlho2rQpf//737nhhhu4//77efLJJ+ncuTNNmzZl165dfPnll+zfv59p06bRpUsXACZMmMCyZct4/PHHWbRoESeeeCKbN2/miy++YNy4cTz//PNxaauIiIhITVAAIxHxNEwh/dLmpF3YjJKl+yn+94+wP2BNTNNU0oc0I61/UzwNatfA3llnncXixYt5+eWXWbJkCRs2bOCzzz4jPT2dY489lqFDhzJ06FD69+9PWlrFj4R/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",
            "text/plain": [
              "<Figure size 900x900 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "Moji_plot_df = analysis.final_results_df(\n",
        "    results_dict = Moji_results,\n",
        "    pareto = True,\n",
        "    # pareto = False,\n",
        "    pareto_selection = \"test\",\n",
        "    selection_criterion = None,\n",
        "    return_dev = True,\n",
        "    # Performance_threshold=0.72\n",
        "    # num_trail=20,\n",
        "    )\n",
        "make_plot(Moji_plot_df)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "alIUoUramVM5"
      },
      "source": [
        "## 5. Read More"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KGd62f13mVM5"
      },
      "source": [
        "- Visualization\n",
        "  - [Interactive plots](https://github.com/HanXudong/fairlib/blob/main/tutorial/interactive_plots.ipynb) demonstrates creating interactive plots for comparing different methods, and demonstrating DTO and constrained selection. Figure 2 in our paper can be reproduced with this function.\n",
        "  - [Plot gallery](https://github.com/HanXudong/fairlib/blob/main/tutorial/plot_gallery.ipynb) presents a list of examples for presenting experimental results, e.g., hyperparameter tuning (Figure 1 in our paper) and trade-off plots with zoomed-in area (Figure 3 in our paper).\n",
        "\n",
        "\n",
        "- Customized Dataset and Models\n",
        "  - [The dataset document](https://github.com/HanXudong/fairlib/blob/main/docs/datasets_and_dataloaders.md) provides instructions for customizing datasets and dataloaders.\n",
        "  - [The model document](https://github.com/HanXudong/fairlib/blob/main/docs/models.md) provides instructions for customizing model architectures and register models.\n",
        "  - Besides text inputs, we also provide examples for customizing [structured inputs](https://github.com/HanXudong/fairlib/blob/main/tutorial/COMPAS.ipynb) and [images](https://github.com/HanXudong/fairlib/blob/main/tutorial/colored_MNIST.ipynb).\n",
        "\n",
        "\n",
        "- Customized Metrics\n",
        "  - Single metric can be seen from [there](https://github.com/HanXudong/fairlib/blob/47f4b332e15ff8f22b238db6be983ec753fd2537/fairlib/src/evaluators/evaluator.py#L94).\n",
        "  - Metric aggregation such as the default root mean square aggregation can be found from [there](https://github.com/HanXudong/fairlib/blob/47f4b332e15ff8f22b238db6be983ec753fd2537/fairlib/src/evaluators/evaluator.py#L75).\n",
        "  - The document is coming soon.\n",
        "\n",
        "\n",
        "- Customized Debiasing Methods\n",
        "  - [Please see the document](https://github.com/HanXudong/fairlib/blob/main/docs/customized_methods.md) for instructions about adding method-specific options and integrating methods with *fairlib*."
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [],
      "name": "demo.ipynb",
      "provenance": []
    },
    "interpreter": {
      "hash": "086b6e2ac5931a4f7a51b812f0475290a145e7d51f3e22b53c52adf5c273fe30"
    },
    "kernelspec": {
      "display_name": "Python 3.7.12 ('py37')",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.7.12"
    },
    "orig_nbformat": 4
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
